package org.shj.pattern.decorator;

/**
 * 装饰模式： 动态地给一个对象添加一些额外的职责。就增加功能来说，装饰模式比生成子类更为灵活
 * 使用场景： 当系统需要新功能的时候，如果新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。
 *         装饰模式把每个要装饰的功能放在单独的类中，并让这个类包装它所要装饰的对象。因此，当需要执行特殊行为时，客户
 *         代码就可以运行时根据需要有选择地、按顺序地使用装饰 功能包装对象。
 * @author huangjian
 *
 */
public class Main {

	public static void main(String[] args){
		ConcreteComponent c = new ConcreteComponent();
		ConcreteDecoratorA d1 = new ConcreteDecoratorA();
		ConcreteDecoratorB d2 = new ConcreteDecoratorB();
		
		d1.setComponent(c);
		d2.setComponent(d1);
		d2.operation();
	}
}
